Active Directory明文密码存储

Active Directory明文密码存储


背景


Active Directory(AD),即Windows的域帐户系统,用于很多公司的IT系统,管理公司计算机和人员帐号。

但是许多第三方系统并不对接AD域控(如腾讯企业邮箱),同时AD默认是不可逆转的加密策略(即单向的Hash算法)。

明文存储用户帐号密码成为了不得以的手段。

允许Windows AD使用Reversible Encryption存储密码


参考这里

我使用的办法是第一条,也就是在Windows组策略中默认打开允许可逆加密存储密码。

Computer Configuration -> Policies -> Windows Settings -> Security Settings -> Account Policies -> Password Policy -> Store passwords using reversible encryption

改为Enable。

注意,所有已创建的帐号必须重新改密码才能生效。

自助密码修改工具


在企业部署不完善的时候,很多用户的计算机没有加入AD域,那么就需要一个修改密码的系统。

参考此处

配置例子

config.inc.local.php:

注意配置下面几项(踩了很多坑,一定不要多改,大家不要踩坑就好):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$ldap_url = "ldaps://your_domain_ip";
$ldap_binddn = "cn=Administrator,cn=Users,dc=your_domain,dc=com";
$ldap_bindpw = "your_admin_password";
$ldap_starttls = false;
$ldap_base = "ou=,dc=,dc=com";
$ldap_login_attribute = "sAMAccountName";
$ldap_fullname_attribute = "cn";
$login_forbidden_chars = "*()&|";
$ad_mode = true;
$ldap_filter = "(&(objectClass=user)(sAMAccountName={login})(!(userAccountControl:1.2.840.113556.1.4.803:=2)))";
$ad_options['force_unlock'] = true;
$ad_options['force_pwd_change'] = false;
$ad_options['change_expired_password'] = true;
$use_change = true;
$who_change_password = "manager";

Dockerfile:

关闭TLS验证,针对自签名证书防止证书验证失败导致无法连接域控服务器(同时注意部署的节点上所有的路由千万要受控)

1
2
3
4
5
6
FROM php:7.2.8-apache-stretch

RUN apt update && apt install -y libldap2-dev \
&& docker-php-ext-install ldap
RUN echo "TLS_REQCERT allow" > /etc/ldap/ldap.conf
RUN curl https://ltb-project.org/archives/ltb-project-self-service-password-1.3.tar.gz|tar zxf - -C /var/www/html --strip-components=1

docker-compose.yaml:

映射配置文件,将容器的80端口映射到本机的8080端口。

1
2
3
4
5
6
7
8
9
10
11
version: '2.3'

services:
ldap-self-service-password:
build: .
image: ldap-self-service-password-image
container_name: ldap-self-service
volumes:
- ./config.inc.local.php:/var/www/html/conf/config.inc.php
ports:
- '8080:80'

nginx不再赘述了。

启动容器:

docker-compose up -d --build

导出密码


这里使用了一个脚本

不熟python的话可以看一下https://blog.csdn.net/u011771047/article/details/74214591。

主要就是先安装python3(或者集成了很多库的anaconda3),然后用pip安装依赖。

安装依赖包argparse与impacket后,下载这个脚本

1
python secretsdump.py -dc-ip your_domain_ip administrator@you_domain_name.com -outputfile output

运行中会要求输入administrator的密码

成功后 output.ntds.cleartext 中有帐号的明文密码,可以用来去各网站调用API同步帐号了。

Комментарии

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×